package day_8_19;

import java.util.HashMap;
import java.util.Map;

/**
 * 2461. 长度为 K 子数组中的最大和
 * https://leetcode.cn/problems/maximum-sum-of-distinct-subarrays-with-length-k/description/
 */
public class Main3 {
    public long maximumSubarraySum(int[] nums, int k) {
        long ret = 0;
        long sum = 0;
        // 使用HashMap进行统计出现的次数
        Map<Integer,Integer> map = new HashMap<>();

        for(int i = 0;i < nums.length;i++) {
            // 1、进入窗口
            sum += nums[i];
            map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);

            if(i < k - 1) {
                continue;
            }

            // 更新答案
            if(map.size() == k) {
                ret = Math.max(ret,sum);
            }

            // 出窗口
            int out = nums[i - (k - 1)];
            sum -= out;
            int count = map.get(out);
            if(count > 1) {
                map.put(out, count - 1);
            }else {
                map.remove(out);
            }
        }
        return ret;
    }
}
